首页> 学习笔记> bootstrap 模态框modal('show')加...

bootstrap 模态框modal('show')加载报错解决

2019年5月5日 23:49


       bootstrap 模态框加载报错:Uncaught TypeError: $(...).modal is not a function 怎么解决呢? 

       bootstrap 提供了一个模态框 modal,我这里用来做了个图片的弹出放大。关于模态框的介绍,在bootstrap上有介绍:具体 看这里

       根据他的例子,很简单就可以做出个简单的小demo,代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
  </head>
  

  <body>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>  
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
    <script>
	  $(function(){  
		$(".panel-body img").click(function(){  
		    var _this = $(this);//将当前的img元素作为_this传入函数 
			$('#myModal img')[0].src = _this[0].src;
			$('#myModal').modal('show');
		});  
	  });
	</script> 
  
	<div class="panel panel-default">
	  <div class="panel-body">
		<img src="img/1.jpg"><br>
	  </div>
	</div>
	<!-- 模态框(Modal) -->
	<div class="modal fade text-center" id="myModal" role="dialog" tabindex="-1"  aria-hidden="true">
	  <div class="modal-dialog" style="width: auto; display: inline-block">
		<div class="modal-content" >
		  <div class="modal-body" >
			<img src="" style="width: auto; max-width:1200px">
		  </div>
		</div><!-- /.modal-content -->
	  </div><!-- /.modal -->
	</div>
  </body>
</html>

       大体思路就是,点击图片---> 给模态框img赋值源地址--->显示模态框。本地调试也是非常OK,但是加到此网站就开始报错了。。。点击图片没反应,打开F12调试,看到如下报错:

       我了个擦,这是什么情况?代码都一样的怎么还不好使呢?打印出来的这个方法确实是未定义的。。感觉像是bootstrap.js没有加载上呢?博主此时是一脸蒙比,于是各种网上搜解决方法。

      此处省略一万字,一个小时。。。。。

      最后发现了问题出在jquery.js文件 和 bootstrap.js文件的引用顺序,以下列举几种情形:

1、先看一个正确的情形,跟上面的代码一样的引用顺序:

<body>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>  
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
     
    ...........
    ...........
</body>

2、再看一个会报错的:

<body>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>  

     
    ...........
    ...........
</body>

其实上面这种情形很容易发现,boostrap的注释写的很清楚,jquery要放在最前面,所以上面这种引用顺序会报错。

3、最后一个是最坑 最隐蔽的错误:

<body>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script> 
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
     
    ...........
    ...........

    <!--在界面某个地方又引用了jquery.js 此时就会有问题!!!!!-->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script> 
</body>

上面这种情形就会出现 Uncaught TypeError: $(...).modal is not a function 报错,非常的坑。。。

        最终翻了翻代码,发现博主别的地方还引用了jquery.js。其实这个也怪我,没有仔细规范好代码,总是这里一坨 那里一坨,css js都没很好的分离,最后在这浪费了时间。下次找个时间争取重构下吧。



bootstrap3       阅读(1466) | 评论(20) | 收藏(0)       收藏文章

上一篇 下一篇

您尚未登录,暂时无法评论。请先 登录 或者 注册

  • bjw9808
    bjw9808 :

    辉哥,我继续提需求奥

    2019年3月5日 11:29   回复
  • bjw9808
    bjw9808 :

    头像的问题,你点开我头像看看,这是啥几把东西???

     

    2019年3月5日 11:29   回复
  • bjw9808
    bjw9808 :

    图太小了

    2019年3月5日 11:29   回复
  • bjw9808
    bjw9808 :

    做一个点击头像显示原图吧

    2019年3月5日 11:30   回复

    • Jerry
      [博主]
      Jerry :

      你要是放个黄图咋办,需求驳回
      2019年3月5日 11:42   回复
    • bjw9808
      bjw9808 :

      ??????你还驳回???想被炮决吗???
      2019年3月5日 13:16   回复
    • Jerry
      [博主]
      Jerry :

      打倒产品经理!
      2019年3月5日 15:15   回复
    • bjw9808
      bjw9808 :

      ????????????
      2019年3月5日 15:36   回复
  • bjw980800
    bjw980800 :

    我明白了,找了半天才找到草稿箱,勾选下面那个不可见就好了

    2019年3月6日 14:28   回复
  • 21506091077
    21506091077 :

    评论测试

    2019年3月8日 13:22   回复

    • 21506091077
      21506091077 :

      回复测试
      2019年3月8日 13:22   回复
    • 21506091077212121212
      21506091077212121212 :

      回复
      2019年3月8日 13:22   回复
    • 21506091077212121212
      21506091077212121212 :

      测试
      2019年3月8日 13:23   回复
    • Jerry
      [博主]
      Jerry :

      老哥 你又来测试了吗?
      2019年3月8日 15:12   回复
    • 21506091077212121212
      21506091077212121212 :

      想知道你这个消息通知是怎么做的,想学一下,请勿见怪
      2019年3月8日 19:36   回复
    • Jerry
      [博主]
      Jerry :

      哈哈,没关系的
      2019年3月8日 19:43   回复
    • 21506091077212121212
      21506091077212121212 :

      可以请问以下你的单个消息标记为已读是如何做的吗
      2019年3月8日 19:53   回复
    • Jerry
      [博主]
      Jerry :

      获取消息id传到后台处理就可以
      2019年3月8日 20:08   回复
  • Hopetree
    Hopetree :

    你的网站响应式体验效果很差,bootstrap 的精髓在于响应式,你好像忽略了这个重要的问题,你可以把你的站点和我的站点对比一下各种不同设备上面的显示效果,手机(横竖屏),平板(横竖屏),PC,显示效果要坚持响应式,这是bootstrap 支持的,你自己的css不要强行去修改成单一的

    2019年3月15日 10:56   回复

    • Jerry
      [博主]
      Jerry :

      好的大佬,我仔细研究研究
      2019年3月15日 11:41   回复